iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0

今天先來談一下浮點運算的問題,在ARMv8的架構下,主要還是依IEEE 754的規定來作運算標準,唯一差別是32位元的只支援單精度的浮點運算,64位元則支援多精度的浮點運算。

寫了這段,大概要讓一般人看懂,會有點困難,我比較希望是用簡單的方式來說明,避免太多術語或者複雜的程式碼擾亂了思考。上述的部分,其實這是在說二進位運算的精準度問題,不管任何一種進位法,其實再互換的過程中都是會有誤差的,例如說,當你將二進位轉成十進位時,也無法保證沒有誤差。

寫過程式的人都可以了解,即使用目前最流行的爬蟲(Python)來寫,一樣會有二進位運算當中出現誤差問題,IEEE 754 就是為了避免二進位的誤差,所訂出來的一些規定,IEEE 754裡面定義了很多東西,其中包括單精度(32 bit)、雙精度(64 bit)跟特殊值(無窮大、NaN)的表示方式等等,如果對二進位轉換有興趣的話,在此提供 (網址:https://www.hschmidt.net/FloatConverter/IEEE754.html) ,有興趣大家可以上去了解一下。

另外,有關支援記憶體模組的部分,ARMv8的一個特色,如果在專業術語上,會說將虛擬位址(virtual addresses)轉成實體位址(physical address),我個人覺得,對於想要學習組合語言的人來說,這種對於初學者來說就會變成學習上的一種障礙。虛擬位址,就是一種比較零散的記憶方式,有點像以前的RAM暫存記憶體一樣,簡單說就是,有些記憶,其實在日常生活裡面,只要短暫的記憶就可以,不需要一直佔據我們腦袋的記憶空間,那麼這種用完即丟的記憶,就是所謂的虛擬位址,平常不會一直使用,當我們需要使用的時候,ARM組合語言,就會把它轉成上面說的實體位址,也就是轉換成二進位,讓電腦記住並且使用,至於說如果要保留下來,就會存入實體記憶體模組內,也就是記在腦海裡,留下深刻的記憶。

以上就是把這兩個部分都是很基礎的概念,在此先作簡單的說明。


上一篇
Day 1 序言及基本運算元件
下一篇
Day 3 ARM的多樣性與開發環境
系列文
ARM 組合語言:30天學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言